/**************************************************
 *                   枚举定义
 *************************************************/
//编辑区事件
export enum editorEvent {
  //快捷键，复制、粘贴、删除
  EDITOR_KEY_EVT_COPY = 0x01,
  EDITOR_KEY_EVT_PASTE,
  EDITOR_KEY_EVT_DEL,
  EDITOR_KEY_EVT_ESC,
  EDITOR_KEY_EVT_SAVE,

  //键盘，上下左右移动
  EDITOR_KEY_EVT_UP_MOVE,
  EDITOR_KEY_EVT_DOWN_MOVE,
  EDITOR_KEY_EVT_LEFT_MOVE,
  EDITOR_KEY_EVT_RIGHT_MOVE,

  //旋转，对齐
  EDITOR_BTN_EVT_POSITIVE_ROTATE,
  EDITOR_BTN_EVT_NEGATIVE_ROTATE,
  EDITOR_BTN_EVT_LEFT_ALIGN,
  EDITOR_BTN_EVT_RIGHT_ALIGN,
  EDITOR_BTN_EVT_HR_CENTER_ALIGN,
  EDITOR_BTN_EVT_TOP_ALIGN,
  EDITOR_BTN_EVT_BOTTOM_ALIGN,
  EDITOR_BTN_EVT_VR_CENTER_ALIGN,

  //鼠标移动
  EDITOR_MOUSE_EVT_MOVE,

  //图层设置
  EDITOR_BTN_EVT_TOP_LAYER,
  EDITOR_BTN_EVT_BOTTOM_LAYER,
  EDITOR_BTN_EVT_PREV_LAYER,
  EDITOR_BTN_EVT_NEXT_LAYER,

  //保存
  EDITOR_BTN_EVT_SAVE
}

/**************************************************
 *                   枚举定义
 *************************************************/
export interface CApplicationNode {
  id: number,
  projectId: number,
  userServerAddr: string,
  adminServerAddr: string,
  scaServerAddr: string,
  ioServerAddr: string,
  ioServerFilePath: string
}

/**************************************************
 *                   项目结构体
 *************************************************/
//项目数据解构
export interface CProjectNode {
  id: number,
  cname: string,
  companyId: number,
  wsAddr: string,
  wsPort: number,
  sortCode: string,
  description: string
}

/**************************************************
 *                   属性数据结构
 *************************************************/

//图形尺寸
export interface CPosition {
  x: number,
  y: number,
  w: number,
  h: number
}

//点
export interface CPoint {
  x: number,
  y: number
}


// 边框
export interface CBorder {
  width: number,
  radius: number,
  line: string,
  color: string,
}

// 基本信息
export interface CShape {
  backgroundColor: string,
  opacity: number,
  visible: number,
  zIndex: number,
  transform: number
}

/**************************************************
 *               组件样式属性结构体
 *************************************************/
//个性化属性结构
export interface CPropsItem {
  id: number,
  label: string,
  value: string,
  dataTypeId: number,
  formTypeId: number,
  optionId: number

  createTime?: any,
  createUserId?: number,
  updateTime?: any,
  updateUserId?: number
}

export interface CPropsNode {
  id: number,
  label: string,
  value: string,
  dataTypeId: number,
  formTypeId: number,
  optionId: number
}

export interface CPropsItemVO {
  id: number,
  label: string,
  value: string,
  dataType: string,
  formType: string,
  option: string
}

/**************************************************
 *               组件数据点属性结构体
 *************************************************/
//数据点
export interface CDataItem {
  id: number,
  nodeLabel: string,    //标识
  nodeValue: string,    //属性，变量名称
  variableLabel: string,  //标识
  variableValue: number,  //属性，变量ID值

  createTime?: any,
  createUserId?: number,
  updateTime?: any,
  updateUserId?: number
}

export interface CDataNode {
  id: number,
  nodeLabel: string,  //标识
  nodeValue: string,  //属性，变量名称
  variableLabel: string,   //标识
  variableValue: number   //属性，变量ID值
}

/**************************************************
 *               组件动效管理结构体
 *************************************************/
//事件点
export interface CMotionItem {
  id: number,
  typeId: number,    //动效类型ID
  variableId: number,  //变量ID
  conditionId: number,  //触发条件类型ID
  mainArg: number,   //主参数
  auxArg: number,    //辅助参数
  interval: number,  //播放时间
  cycle: number,    //循环次数

  createTime?: any,
  createUserId?: number,
  updateTime?: any,
  updateUserId?: number
}

//事件点
export interface CMotionNode {
  id: number,
  typeId: number,    //动效类型ID
  variableId: number,  //变量ID
  conditionId: number,    //触发条件类型ID
  mainArg: number,   //主参数
  auxArg: number,    //辅助参数
  interval: number,  //播放时间
  cycle: number    //循环次数
}

/**************************************************
 *               组件事件管理结构体
 *************************************************/
//事件点
export interface CEventItem {
  id: number,
  typeId: number,    //事件类型ID
  operationId: number,    //事件行为类型ID
  variableId?: number,  //变量ID
  operatorId?: number, //关系运算ID
  mainArg?: number,   //主参数
  auxArg?: number,    //辅助参数
  userId?: number,  //管理员ID
  url?: string,    //文件链接地址
  msg?: string,   //发送信息

  createTime?: any,
  createUserId?: number,
  updateTime?: any,
  updateUserId?: number
}

//事件点
export interface CEventNode {
  id: number,
  typeId: number,    //事件类型ID
  operationId: number,    //事件行为类型ID
  variableId?: number,  //变量ID
  operatorId?: number, //关系运算ID
  mainArg?: number,   //主参数
  auxArg?: number,    //辅助参数
  userId?: number,  //管理员ID
  url?: string,    //文件链接地址
  msg?: string   //发送信息
}

/**************************************************
 *                   组件结构体
 *************************************************/
/**************************************************
 *               组件管理结构体
 *************************************************/
// 组件原始数据结构
export interface CComponentTreeItem {
  id: number,
  typeId: number,
  pageId: number,
  comLabel: string,
  comValue: string,
  comSid: string,

  left: number,
  top: number,
  width: number,
  height: number,

  backgroundColor: string,
  opacity: number,
  visible: number,
  zindex: number,
  transform: number,

  borderWidth: number,
  borderRadius: number,
  borderLine: string,
  borderColor: string,

  minWidth: number,
  minHeight: number,
  propsItem?: CPropsItem[], //个性化属性
  dataItem?: CDataItem[],   //数据节点数组
  motionItem?: CMotionItem[], //动效数组
  eventItem?: CEventItem[]   //事件数组

  createTime?: any,
  createUserId?: number,
  updateTime?: any,
  updateUserId?: number
}

// 组件原始数据结构
export interface CComponentTreeNode {
  id: number,
  typeId: number,
  pageId: number,
  comLabel: string,
  comValue: string,
  comSid: string,

  left: number,
  top: number,
  width: number,
  height: number,

  backgroundColor: string,
  opacity: number,
  visible: number,
  zindex: number,
  transform: number,

  borderWidth: number,
  borderRadius: number,
  borderLine: string,
  borderColor: string,

  minWidth: number,
  minHeight: number,
  propsItem?: CPropsNode[],  //个性化属性
  dataItem?: CDataNode[],    //数据节点数组
  motionItem?: CMotionItem[], //动效数组
  eventItem?: CEventNode[],  //事件数组
}

/**************************************************
 *                   页面结构体
 *************************************************/
//页面类型
export enum EPageType {
  NULL_PAGE = 0,
  MOD_PAGE = 1,
  NEW_PAGE,
  EXIST_PAGE
}

// 页面数据结构
export interface CPageItem {
  id: number,
  typeId: number,
  imgUrl: string | null,
  cname: string,
  backgroundColor: string,
  backgroundImage: string | null,
  resolution: string,
  width: number,
  height: number,
  wsAddr: string,
  wsPort: number,
  projectId: number,
  sortCode: string,
  description: string,

  createTime?: any,
  createUserId?: number,
  updateTime?: any,
  updateUserId?: number
}

// 画布数据结构
export interface CPageNode {
  id: number,
  typeId: number,
  imgUrl: string | null,
  cname: string,
  backgroundColor: string,
  backgroundImage: string | null,
  resolution: string,
  width: number,
  height: number,
  wsAddr: string,
  wsPort: number,
  projectId: number,
  sortCode: string,
  description: string
}

/**************************************************
 *                   组件store结构体
 *************************************************/
// 图元数据结构
export interface CGraphEntity {
  id: number,
  typeId: number,
  pageId: number,
  comLabel: string,   //对应com_label
  comValue: string,   //对应com_value
  comSid: string,

  position: CPosition,
  shape: CShape,
  border: CBorder,

  minWidth: number,
  minHeight: number,

  propsItem: CPropsNode[],  //个性化属性数组
  dataItem: CDataNode[],     //数据节点数组
  motionItem: CMotionItem[], //动效数组
  eventItem: CEventNode[]   //事件数组
}

//选择项结构体
export type CSelectGraph = null | CGraphEntity

//组件状态
export interface CComponentStateItem {
  comSid: string,
  selected: boolean
}

//组件数据结构
export interface CVariableDataItem {
  varId: number,   //变量ID
  vData: number    //数据值
}


//组件数据结构
export interface CDynamicDataItem {
  vid: number,   //变量ID
  name: string,
  value: number    //数据值
}

/**************************************************
 *                   websocket通信结构体
 *************************************************/
//定义变量类型
export enum EVarType {
  VAR_NULL = 'VAR_NULL',
  VAR_DI = 'VAR_DI',
  VAR_DO = 'VAR_DO',
  VAR_AI = 'VAR_AI',
  VAR_AO = 'VAR_AO',
  VAR_CI = 'VAR_CI',
  VAR_CO = 'VAR_CO'
}

//设备结构
export interface CDeviceDataItem {
  devId: number,          //设备ID
  status: number          //连接状态
}
